// basics generated using nilibddc.h inside of pinvoke-interop-assistant and some cleanup
// this example will only work with 64bit process
// make sure "nilibddc.dll" can be found in the PATH or is beneath the executable

using System.Runtime.InteropServices;

// ReSharper disable InconsistentNaming

namespace TDMS.Net.Internals;

internal class NiLibDDC
{
    private const string NILIBDDC_DLL_PATH = "nilibddc.dll";

    /// Return Type: int
    ///filePath: char*
    ///fileType: char*
    ///name: char*
    ///description: char*
    ///title: char*
    ///author: char*
    ///file: DDCFileHandle*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateFile", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateFile([In, MarshalAs(UnmanagedType.LPStr)] string filePath,
        [In, MarshalAs(UnmanagedType.LPStr)] string fileType,
        [In, MarshalAs(UnmanagedType.LPStr)] string name,
        [In, MarshalAs(UnmanagedType.LPStr)] string description,
        [In, MarshalAs(UnmanagedType.LPStr)] string title,
        [In, MarshalAs(UnmanagedType.LPStr)] string author,
        ref IntPtr file);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///name: char*
    ///description: char*
    ///channelGroup: DDCChannelGroupHandle*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_AddChannelGroup", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_AddChannelGroup(IntPtr file,
        [In, MarshalAs(UnmanagedType.LPStr)] string name,
        [In, MarshalAs(UnmanagedType.LPStr)] string description,
        ref IntPtr channelGroup);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///dataType: DDCDataType->Anonymous_0b877285_5a13_4093_be53_b3e8831936f9
    ///name: char*
    ///description: char*
    ///unitString: char*
    ///channel: DDCChannelHandle*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_AddChannel", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_AddChannel(IntPtr channelGroup,
        ETdmsDataType dataType,
        [In, MarshalAs(UnmanagedType.LPStr)] string name,
        [In, MarshalAs(UnmanagedType.LPStr)] string description,
        [In, MarshalAs(UnmanagedType.LPStr)] string unitString,
        ref IntPtr channel);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SaveFile", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SaveFile(IntPtr file);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CloseFile", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CloseFile(IntPtr file);


    /// Return Type: int
    ///filePath: char*
    ///fileType: char*
    ///readOnly: int
    ///file: DDCFileHandle*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_OpenFileEx", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_OpenFileEx([In, MarshalAs(UnmanagedType.LPStr)] string filePath,
        [In, MarshalAs(UnmanagedType.LPStr)] string fileType,
        int readOnly,
        ref IntPtr file);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_RemoveChannelGroup", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_RemoveChannelGroup(IntPtr channelGroup);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_RemoveChannel", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_RemoveChannel(IntPtr channel);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CloseChannelGroup", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CloseChannelGroup(IntPtr channelGroup);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CloseChannel", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CloseChannel(IntPtr channel);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: void*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetDataValues", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetDataValues(IntPtr channel, IntPtr values, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///year: unsigned int*
    ///month: unsigned int*
    ///day: unsigned int*
    ///hour: unsigned int*
    ///minute: unsigned int*
    ///second: unsigned int*
    ///milliSecond: double*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetDataValuesTimestampComponents", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetDataValuesTimestampComponents(IntPtr channel, uint[] year, uint[] month, uint[] day, uint[] hour, uint[] minute, uint[] second, double[] milliSecond, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: void*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_AppendDataValues", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_AppendDataValues(IntPtr channel, IntPtr values, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///year: unsigned int*
    ///month: unsigned int*
    ///day: unsigned int*
    ///hour: unsigned int*
    ///minute: unsigned int*
    ///second: unsigned int*
    ///milliSecond: double*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_AppendDataValuesTimestampComponents", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_AppendDataValuesTimestampComponents(IntPtr channel, uint[] year, uint[] month, uint[] day, uint[] hour, uint[] minute, uint[] second, double[] milliSecond, ulong numValues);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///numChannelGroups: unsigned int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetNumChannelGroups", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetNumChannelGroups(IntPtr file, ref uint numChannelGroups);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///channelGroupsBuf: DDCChannelGroupHandle*
    ///numChannelGroups: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroups", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroups(IntPtr file, IntPtr[] channelGroupsBuf, ulong numChannelGroups);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///numChannels: unsigned int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetNumChannels", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetNumChannels(IntPtr channelGroup, ref uint numChannels);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///channelsBuf: DDCChannelHandle*
    ///numChannels: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannels", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannels(IntPtr channelGroup, IntPtr[] channelsBuf, ulong numChannels);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///numValues: unsigned __int64*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetNumDataValues", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetNumDataValues(IntPtr channel, ref ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///indexOfFirstValueToGet: size_t->System.UInt64
    ///numValuesToGet: size_t->System.UInt64
    ///values: void*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetDataValues", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetDataValues(IntPtr channel, ulong indexOfFirstValueToGet, ulong numValuesToGet, IntPtr values);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///indexOfFirstValueToGet: size_t->System.UInt64
    ///numValuesToGet: size_t->System.UInt64
    ///year: unsigned int*
    ///month: unsigned int*
    ///day: unsigned int*
    ///hour: unsigned int*
    ///minute: unsigned int*
    ///second: unsigned int*
    ///milliSecond: double*
    ///weekDay: unsigned int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetDataValuesTimestampComponents", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetDataValuesTimestampComponents(IntPtr channel, ulong indexOfFirstValueToGet, ulong numValuesToGet, uint[] year, uint[] month, uint[] day, uint[] hour, uint[] minute, uint[] second, double[] milliSecond, uint[] weekDay);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///dataType: DDCDataType*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetDataType", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetDataType(IntPtr channel, ref ETdmsDataType dataType);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///year: unsigned int
    ///month: unsigned int
    ///day: unsigned int
    ///hour: unsigned int
    ///minute: unsigned int
    ///second: unsigned int
    ///milliSecond: double
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetFilePropertyTimestampComponents", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetFilePropertyTimestampComponents(IntPtr file,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, uint year, uint month, uint day, uint hour, uint minute, uint second, double milliSecond);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///args: va_list->char*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetFilePropertyV", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetFilePropertyV(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, IntPtr args);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: void*
    ///valueSizeInBytes: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetFileProperty", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetFileProperty(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, IntPtr value, ulong valueSizeInBytes);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///year: unsigned int*
    ///month: unsigned int*
    ///day: unsigned int*
    ///hour: unsigned int*
    ///minute: unsigned int*
    ///second: unsigned int*
    ///milliSecond: double*
    ///weekDay: unsigned int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetFilePropertyTimestampComponents", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetFilePropertyTimestampComponents(IntPtr file,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, ref uint year, ref uint month, ref uint day, ref uint hour, ref uint minute, ref uint second, ref double milliSecond, ref uint weekDay);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///length: unsigned int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetFileStringPropertyLength", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetFileStringPropertyLength(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, ref uint length);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///year: unsigned int
    ///month: unsigned int
    ///day: unsigned int
    ///hour: unsigned int
    ///minute: unsigned int
    ///second: unsigned int
    ///milliSecond: double
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateFilePropertyTimestampComponents", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateFilePropertyTimestampComponents(IntPtr file,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, uint year, uint month, uint day, uint hour, uint minute, uint second, double milliSecond);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///exists: int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_FilePropertyExists", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_FilePropertyExists(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, ref int exists);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///numProperties: unsigned int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetNumFileProperties", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetNumFileProperties(IntPtr file, ref uint numProperties);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///propertyNames: char**
    ///numPropertyNames: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetFilePropertyNames", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetFilePropertyNames(IntPtr file, ref IntPtr propertyNames, ulong numPropertyNames);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///dataType: DDCDataType*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetFilePropertyType", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetFilePropertyType(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, ref ETdmsDataType dataType);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///year: unsigned int
    ///month: unsigned int
    ///day: unsigned int
    ///hour: unsigned int
    ///minute: unsigned int
    ///second: unsigned int
    ///milliSecond: double
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelGroupPropertyTimestampComponents", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelGroupPropertyTimestampComponents(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, uint year, uint month, uint day, uint hour, uint minute, uint second, double milliSecond);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///args: va_list->char*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelGroupPropertyV", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelGroupPropertyV(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, IntPtr args);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: void*
    ///valueSizeInBytes: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroupProperty", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroupProperty(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, IntPtr value, ulong valueSizeInBytes);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///year: unsigned int*
    ///month: unsigned int*
    ///day: unsigned int*
    ///hour: unsigned int*
    ///minute: unsigned int*
    ///second: unsigned int*
    ///milliSecond: double*
    ///weekDay: unsigned int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroupPropertyTimestampComponents", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroupPropertyTimestampComponents(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, ref uint year, ref uint month, ref uint day, ref uint hour, ref uint minute, ref uint second, ref double milliSecond, ref uint weekDay);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///length: unsigned int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroupStringPropertyLength", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroupStringPropertyLength(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, ref uint length);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///year: unsigned int
    ///month: unsigned int
    ///day: unsigned int
    ///hour: unsigned int
    ///minute: unsigned int
    ///second: unsigned int
    ///milliSecond: double
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelGroupPropertyTimestampComponents", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelGroupPropertyTimestampComponents(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, uint year, uint month, uint day, uint hour, uint minute, uint second, double milliSecond);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///exists: int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_ChannelGroupPropertyExists", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_ChannelGroupPropertyExists(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, ref int exists);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///numProperties: unsigned int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetNumChannelGroupProperties", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetNumChannelGroupProperties(IntPtr channelGroup, ref uint numProperties);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///propertyNames: char**
    ///numPropertyNames: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroupPropertyNames", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroupPropertyNames(IntPtr channelGroup, ref IntPtr propertyNames, ulong numPropertyNames);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///dataType: DDCDataType*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroupPropertyType", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroupPropertyType(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, ref ETdmsDataType dataType);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///year: unsigned int
    ///month: unsigned int
    ///day: unsigned int
    ///hour: unsigned int
    ///minute: unsigned int
    ///second: unsigned int
    ///milliSecond: double
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelPropertyTimestampComponents", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelPropertyTimestampComponents(IntPtr channel,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, uint year, uint month, uint day, uint hour, uint minute, uint second, double milliSecond);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: void*
    ///valueSizeInBytes: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelProperty", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelProperty(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, IntPtr value, ulong valueSizeInBytes);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///year: unsigned int*
    ///month: unsigned int*
    ///day: unsigned int*
    ///hour: unsigned int*
    ///minute: unsigned int*
    ///second: unsigned int*
    ///milliSecond: double*
    ///weekDay: unsigned int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelPropertyTimestampComponents", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelPropertyTimestampComponents(IntPtr channel,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, ref uint year, ref uint month, ref uint day, ref uint hour, ref uint minute, ref uint second, ref double milliSecond, ref uint weekDay);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///length: unsigned int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelStringPropertyLength", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelStringPropertyLength(IntPtr channel,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, ref uint length);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///year: unsigned int
    ///month: unsigned int
    ///day: unsigned int
    ///hour: unsigned int
    ///minute: unsigned int
    ///second: unsigned int
    ///milliSecond: double
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelPropertyTimestampComponents", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelPropertyTimestampComponents(IntPtr channel,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, uint year, uint month, uint day, uint hour, uint minute, uint second, double milliSecond);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///dataType: DDCDataType->Anonymous_0b877285_5a13_4093_be53_b3e8831936f9
    ///args: va_list->char*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelPropertyV", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelPropertyV(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, ETdmsDataType dataType, IntPtr args);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///exists: int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_ChannelPropertyExists", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_ChannelPropertyExists(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, ref int exists);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///numProperties: unsigned int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetNumChannelProperties", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetNumChannelProperties(IntPtr channel, ref uint numProperties);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///propertyNames: char**
    ///numPropertyNames: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelPropertyNames", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelPropertyNames(IntPtr channel, ref IntPtr propertyNames, ulong numPropertyNames);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///dataType: DDCDataType*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelPropertyType", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelPropertyType(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, ref ETdmsDataType dataType);


    /// Return Type: char*
    ///errorCode: int
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetLibraryErrorDescription", CallingConvention = CallingConvention.StdCall)]
    public static extern IntPtr DDC_GetLibraryErrorDescription(int errorCode);


    /// Return Type: void
    ///memoryPointer: void*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_FreeMemory", CallingConvention = CallingConvention.StdCall)]
    public static extern void DDC_FreeMemory(IntPtr memoryPointer);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: unsigned char*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetDataValuesUInt8", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetDataValuesUInt8(IntPtr channel, byte[] values, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: short*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetDataValuesInt16", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetDataValuesInt16(IntPtr channel, short[] values, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: int*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetDataValuesInt32", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetDataValuesInt32(IntPtr channel, int[] values, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: float*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetDataValuesFloat", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetDataValuesFloat(IntPtr channel, float[] values, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: double*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetDataValuesDouble", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetDataValuesDouble(IntPtr channel, double[] values, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: const char **
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetDataValuesString", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    public static extern int DDC_SetDataValuesString(IntPtr channel, string[] values, ulong numValues);
    

    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: unsigned char*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_AppendDataValuesUInt8", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_AppendDataValuesUInt8(IntPtr channel, byte[] values, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: short*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_AppendDataValuesInt16", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_AppendDataValuesInt16(IntPtr channel, short[] values, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: int*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_AppendDataValuesInt32", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_AppendDataValuesInt32(IntPtr channel, int[] values, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: float*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_AppendDataValuesFloat", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_AppendDataValuesFloat(IntPtr channel, float[] values, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: double*
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_AppendDataValuesDouble", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_AppendDataValuesDouble(IntPtr channel, double[] values, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///values: char**
    ///numValues: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_AppendDataValuesString", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    public static extern int DDC_AppendDataValuesString(IntPtr channel, [MarshalAs(UnmanagedType.SafeArray)] string[] values, ulong numValues);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///indexOfFirstValueToGet: size_t->System.UInt64
    ///numValuesToGet: size_t->System.UInt64
    ///values: unsigned char*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetDataValuesUInt8", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetDataValuesUInt8(IntPtr channel, ulong indexOfFirstValueToGet, ulong numValuesToGet, byte[] values);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///indexOfFirstValueToGet: size_t->System.UInt64
    ///numValuesToGet: size_t->System.UInt64
    ///values: short*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetDataValuesInt16", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetDataValuesInt16(IntPtr channel, ulong indexOfFirstValueToGet, ulong numValuesToGet, short[] values);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///indexOfFirstValueToGet: size_t->System.UInt64
    ///numValuesToGet: size_t->System.UInt64
    ///values: int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetDataValuesInt32", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetDataValuesInt32(IntPtr channel, ulong indexOfFirstValueToGet, ulong numValuesToGet, int[] values);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///indexOfFirstValueToGet: size_t->System.UInt64
    ///numValuesToGet: size_t->System.UInt64
    ///values: float*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetDataValuesFloat", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetDataValuesFloat(IntPtr channel, ulong indexOfFirstValueToGet, ulong numValuesToGet, float[] values);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///indexOfFirstValueToGet: size_t->System.UInt64
    ///numValuesToGet: size_t->System.UInt64
    ///values: double*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetDataValuesDouble", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetDataValuesDouble(IntPtr channel, ulong indexOfFirstValueToGet, ulong numValuesToGet, double[] values);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///indexOfFirstValueToGet: size_t->System.UInt64
    ///numValuesToGet: size_t->System.UInt64
    ///values: char**
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetDataValuesString", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetDataValuesString(IntPtr channel, ulong indexOfFirstValueToGet, ulong numValuesToGet, ref IntPtr values);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: unsigned char
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateFilePropertyUInt8", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateFilePropertyUInt8(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, byte value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: short
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateFilePropertyInt16", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateFilePropertyInt16(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, short value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: int
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateFilePropertyInt32", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateFilePropertyInt32(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, int value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: float
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateFilePropertyFloat", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateFilePropertyFloat(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, float value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: double
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateFilePropertyDouble", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateFilePropertyDouble(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, double value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: char*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateFilePropertyString", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateFilePropertyString(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property,
        [In, MarshalAs(UnmanagedType.LPStr)] string value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: unsigned char
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetFilePropertyUInt8", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetFilePropertyUInt8(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, byte value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: short
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetFilePropertyInt16", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetFilePropertyInt16(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, short value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: int
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetFilePropertyInt32", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetFilePropertyInt32(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, int value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: float
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetFilePropertyFloat", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetFilePropertyFloat(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, float value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: double
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetFilePropertyDouble", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetFilePropertyDouble(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, double value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: char*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetFilePropertyString", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetFilePropertyString(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property,
        [In, MarshalAs(UnmanagedType.LPStr)] string value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: unsigned char*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetFilePropertyUInt8", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetFilePropertyUInt8(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, IntPtr value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: short*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetFilePropertyInt16", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetFilePropertyInt16(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, ref short value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetFilePropertyInt32", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetFilePropertyInt32(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, ref int value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: float*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetFilePropertyFloat", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetFilePropertyFloat(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, ref float value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: double*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetFilePropertyDouble", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetFilePropertyDouble(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, ref double value);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///property: char*
    ///value: char*
    ///valueSize: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetFilePropertyString", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetFilePropertyString(IntPtr file, [In, MarshalAs(UnmanagedType.LPStr)] string property, IntPtr value, ulong valueSize);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: unsigned char
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelGroupPropertyUInt8", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelGroupPropertyUInt8(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, byte value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: short
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelGroupPropertyInt16", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelGroupPropertyInt16(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, short value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: int
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelGroupPropertyInt32", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelGroupPropertyInt32(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, int value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: float
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelGroupPropertyFloat", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelGroupPropertyFloat(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, float value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: double
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelGroupPropertyDouble", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelGroupPropertyDouble(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, double value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: char*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelGroupPropertyString", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelGroupPropertyString(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, [In, MarshalAs(UnmanagedType.LPStr)] string value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: unsigned char
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelGroupPropertyUInt8", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelGroupPropertyUInt8(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, byte value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: short
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelGroupPropertyInt16", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelGroupPropertyInt16(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, short value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: int
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelGroupPropertyInt32", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelGroupPropertyInt32(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, int value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: float
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelGroupPropertyFloat", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelGroupPropertyFloat(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, float value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: double
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelGroupPropertyDouble", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelGroupPropertyDouble(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, double value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: char*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelGroupPropertyString", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelGroupPropertyString(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, [In, MarshalAs(UnmanagedType.LPStr)] string value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: unsigned char*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroupPropertyUInt8", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroupPropertyUInt8(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, IntPtr value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: short*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroupPropertyInt16", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroupPropertyInt16(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, ref short value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroupPropertyInt32", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroupPropertyInt32(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, ref int value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: float*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroupPropertyFloat", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroupPropertyFloat(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, ref float value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: double*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroupPropertyDouble", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroupPropertyDouble(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, ref double value);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///property: char*
    ///value: char*
    ///valueSize: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroupPropertyString", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroupPropertyString(IntPtr channelGroup,
        [In, MarshalAs(UnmanagedType.LPStr)] string property, IntPtr value, ulong valueSize);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: unsigned char
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelPropertyUInt8", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelPropertyUInt8(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, byte value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: short
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelPropertyInt16", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelPropertyInt16(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, short value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: int
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelPropertyInt32", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelPropertyInt32(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, int value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: float
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelPropertyFloat", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelPropertyFloat(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, float value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: double
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelPropertyDouble", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelPropertyDouble(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, double value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: char*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_CreateChannelPropertyString", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_CreateChannelPropertyString(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property,
        [In, MarshalAs(UnmanagedType.LPStr)] string value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: unsigned char
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelPropertyUInt8", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelPropertyUInt8(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, byte value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: short
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelPropertyInt16", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelPropertyInt16(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, short value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: int
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelPropertyInt32", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelPropertyInt32(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, int value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: float
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelPropertyFloat", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelPropertyFloat(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, float value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: double
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelPropertyDouble", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelPropertyDouble(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, double value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: char*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_SetChannelPropertyString", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_SetChannelPropertyString(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property,
        [In, MarshalAs(UnmanagedType.LPStr)] string value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: unsigned char*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelPropertyUInt8", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelPropertyUInt8(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, IntPtr value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: short*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelPropertyInt16", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelPropertyInt16(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, ref short value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: int*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelPropertyInt32", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelPropertyInt32(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, ref int value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: float*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelPropertyFloat", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelPropertyFloat(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, ref float value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: double*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelPropertyDouble", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelPropertyDouble(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, ref double value);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///property: char*
    ///value: char*
    ///valueSize: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelPropertyString", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelPropertyString(IntPtr channel, [In, MarshalAs(UnmanagedType.LPStr)] string property, IntPtr value, ulong valueSize);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///index: size_t->System.UInt64
    ///propertyName: char*
    ///propertyNameSize: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetFilePropertyNameFromIndex", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetFilePropertyNameFromIndex(IntPtr file, ulong index, IntPtr propertyName, ulong propertyNameSize);


    /// Return Type: int
    ///file: DDCFileHandle->void*
    ///index: size_t->System.UInt64
    ///propertyNameLength: size_t*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetFilePropertyNameLengthFromIndex", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetFilePropertyNameLengthFromIndex(IntPtr file, ulong index, ref ulong propertyNameLength);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///index: size_t->System.UInt64
    ///propertyName: char*
    ///propertyNameSize: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroupPropertyNameFromIndex", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroupPropertyNameFromIndex(IntPtr channelGroup, ulong index, IntPtr propertyName, ulong propertyNameSize);


    /// Return Type: int
    ///channelGroup: DDCChannelGroupHandle->void*
    ///index: size_t->System.UInt64
    ///propertyNameLength: size_t*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelGroupPropertyNameLengthFromIndex", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelGroupPropertyNameLengthFromIndex(IntPtr channelGroup, ulong index, ref ulong propertyNameLength);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///index: size_t->System.UInt64
    ///propertyName: char*
    ///propertyNameSize: size_t->System.UInt64
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelPropertyNameFromIndex", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelPropertyNameFromIndex(IntPtr channel, ulong index, IntPtr propertyName, ulong propertyNameSize);


    /// Return Type: int
    ///channel: DDCChannelHandle->void*
    ///index: size_t->System.UInt64
    ///propertyNameLength: size_t*
    [DllImport(NILIBDDC_DLL_PATH, EntryPoint = "DDC_GetChannelPropertyNameLengthFromIndex", CallingConvention = CallingConvention.StdCall)]
    public static extern int DDC_GetChannelPropertyNameLengthFromIndex(IntPtr channel, ulong index, ref ulong propertyNameLength);

}
